package com.itlong.cloud.property.service;

import com.itlong.cloud.POJO.DTO.app.AppFaceRecognitionDeviceAuthDTO;
import com.itlong.cloud.POJO.DTO.common.PadFaceSyncDataDTO;
import com.itlong.cloud.POJO.VO.app.PadIncrementUpdateGetVO;
import com.itlong.cloud.POJO.VO.property.PadFaceUserInfoNewVO;
import com.itlong.cloud.POJO.VO.smartcard.SmartCardIncrementUpdateGetVO;

import java.util.List;
import java.util.Map;

/**
 * <desc>
 *      平板人脸增量同步数据服务接口
 * </desc>
 *
 * @createDate 2019/01/17
 */
public interface IPadFaceSyncDataService {

    /**
     * <desc>
     *      住户信息变更和楼层映射信息变更触发平板人脸识别离线优先同步数据
     * </desc>
     *
     * @param padFaceSyncDataDTO 平板人脸增量同步数据DTO
     * @return 0失败，1成功
     * @author wangzhi
     * @createDate 2019/01/17
     */
    Integer userOrFloorSync(PadFaceSyncDataDTO padFaceSyncDataDTO) throws Exception;

    /**
     * <desc>
     *      住户信息变更和楼层映射信息变更触发平板人脸识别离线优先同步数据
     * </desc>
     *
     * @param padFaceSyncDataDTO 人脸增量同步数据DTO
     * @return 0失败，1成功
     * @author wangzhi
     * @createDate 2019/03/19
     */
    Integer userOrFloorSyncSmartCard(PadFaceSyncDataDTO padFaceSyncDataDTO) throws Exception;

    /**
     * <desc>
     *      平板增量获取变更数据接口
     * </desc>
     *
     * @param padDeviceUnique 平板deviceUnique
     * @return 变更数据
     * @author wangzhi
     * @createDate 2019/01/18
     */
    List<PadIncrementUpdateGetVO> getIncrementUpdate(String padDeviceUnique) throws Exception;

    /**
     * <desc>
     *      修改同步状态为同步结束
     * </desc>
     *
     * @param syncSerialNo 同步流水号，多个用英文逗号相连
     * @return 0失败，1成功
     * @author wangzhi
     * @createDate 2019/01/18
     */
    Integer updateSyncStatus(String syncSerialNo) throws Exception;

    /**
     * <desc>
     *      修改同步状态为同步结束
     * </desc>
     *
     * @param syncSerialNo 同步流水号，多个用英文逗号相连
     * @param msg 失败原因
     * @return 0失败，1成功
     * @author wangzhi
     * @createDate 2019/01/18
     */
    Integer reportUpdateResult(String syncSerialNo,String msg) throws Exception;

    /**
     * <desc>
     *      平板上电获取全量数据
     * </desc>
     *
     * @param deviceUnique
     * @param type
     * @return
     * @author Jiaqi.X
     * @createDate 2019/01/23
     */
    Map<String,Object> pullFull(String bandDeviceUnique,String deviceUnique,Integer type);

    /**
     * <desc>
     *      推送用户权限信息变更消息
     * </desc>    private Integer sourceSystem;   //系统来源(0:APP端,1:小程序,2:物业后台,3:运营后台)

     *
     * @param auths
     * @author Jiaqi.X
     * @createDate 2019/01/24
     */
    void pushUserAuthChange(String userId,String roomId,List<Map<String,Object>> auths,String projectId,Integer InstructionType,Integer sourceSystem) throws Exception;

    /**
     * <desc>
     *      推送全量数据
     * </desc>
     *
     * @param deviceUnique
     * @param projectId
     * @author Jiaqi.X
     * @createDate 2019/01/24
     */
    void pushFull(String deviceUnique,String projectId);

    /**
     * <desc>
     *      增量获取变更数据
     * </desc>
     *
     * @param projectId 项目编号
     * @return 增量数据
     * @author wangzhi
     * @createDate 2019/03/18
     */
    List<SmartCardIncrementUpdateGetVO> getIncrementUpdateSmartCard(String projectId) throws Exception;

    /**
     * <desc>
     *      修改同步状态为同步结束
     * </desc>
     *
     * @param syncSerialNo 同步流水号，多个用英文逗号相连
     * @return 0-失败 1-成功
     * @author wangzhi
     * @createDate 2019/03/18
     */
    Integer updateSyncStatusSmartCard(String syncSerialNo) throws Exception;

    /**
     * <desc>
     *      获取访客单元下的电梯及对应电梯的楼层权限
     * </desc>
     *
     * @param unitId
     * @param floorNum
     * @return
     * @author Jiaqi.X
     * @createDate 2019/06/06
     *
     */
    List<Map<String,Object>> getElevatorsByUnitId(String unitId,String floorNum);

    /**
     * <desc>
     *      生成人脸指令
     * </desc>
     *
     * @param deviceUnique  人脸识别仪编号
     * @param userInfo   用户信息
     * @return
     * @author Qiang.S
     * @createDate 2019/12/24
     */
    void createUserInstruct(String deviceUnique,String userInfo,Integer InstructionType,Integer sourceSystem);

    /**
     * <desc>
     *      处理绑定普通门禁设备平板指令
     * </desc>
     *
     * @param appFaceRecognitionDeviceAuthDTO  处理绑定普通门禁平板指令入参
     * @return
     * @author Qiang.S
     * @createDate 2020/03/09
     */
    void padDeviceAuth(AppFaceRecognitionDeviceAuthDTO appFaceRecognitionDeviceAuthDTO) throws Exception;

    /**
     * <desc>
     *      处理绑定普通门禁用户平板指令
     * </desc>
     *
     * @param appFaceRecognitionDeviceAuthDTO  处理绑定普通门禁平板指令入参
     * @return
     * @author Qiang.S
     * @createDate 2020/03/10
     */
    void padUserAuth(AppFaceRecognitionDeviceAuthDTO appFaceRecognitionDeviceAuthDTO) throws Exception;

    /**
     * <desc>
     *      处理启用禁用角色平板指令
     * </desc>
     *
     * @param appFaceRecognitionDeviceAuthDTO  处理启用禁用角色平板指令入参
     * @return
     * @author Qiang.S
     * @createDate 2020/04/01
     */
    void padRoleStatusBussiness(AppFaceRecognitionDeviceAuthDTO appFaceRecognitionDeviceAuthDTO) throws Exception;

    /**
     * <desc>
     *      查询用户是否有人脸
     * </desc>
     *
     * @param userId 用户编号
     * @param projectId 项目编号
     * @return
     * @author Juguang.S
     * @createDate 2020/05/20
     */
    String getFacePicUrl(String userId, String projectId);

    /**
     * <desc>
     *      sdk注销用户时处理平板用户指令
     * </desc>
     *
     * @param userId 用户编号
     * @return
     * @author Qiang.S
     * @createDate 2020/07/03
     */
    void userSyncForSDK(String userId);

    /**
     * <desc>
     *      京东 sdk注销用户时处理平板用户指令
     * </desc>
     *
     * @param userId 用户编号
     * @return
     * @Author Zhu.yj
     * @createDate  2020/12/18
     */
    void jdUserSyncForSDK(String userId, String projectId) throws Exception;

    /**
     * <desc>
     *      注销用户时处理平板用户指令
     * </desc>
     *
     * @param userId 用户编号
     * @return
     * @Author Juguang.S
     * @createDate  2021/05/21
     */
    void userSyncForFaceUrl(String userId, String projectId) throws Exception;

    /**
     * <desc>
     *      京东住户信息变更及住户权限变更触发平板人脸识别离线优先同步数据
     * </desc>
     *
     * @param padFaceSyncDataDTO 平板人脸增量同步数据DTO
     * @return 0失败，1成功
     * @author Zhu.yj
     * @createDate 2020/12/9
     */
    Integer jdUserDataSync(PadFaceSyncDataDTO padFaceSyncDataDTO) throws Exception;

    /**
     * <desc>
     *      无地址平板上电获取全量数据
     * </desc>
     *
     * @param bandDeviceUnique 绑定设备类表
     * @param deviceUnique 平板设备唯一码
     * @param type 设备类型
     * @return
     * @author Jiaqi.X
     * @createDate 2019/01/23
     */
    Map<String,Object> pullFullNoAddress(String bandDeviceUnique,String deviceUnique,Integer type) throws Exception;

    /**
     * <desc>
     *      异步修改人脸照片,京东设置超时时间为5s，
     * </desc>
     *
     * @param padFaceSyncDataDTO
     * @return
     * @Author Zhu.yj
     * @createDate  2021/1/27
     */
    void jdUpdatePhotoSync(PadFaceSyncDataDTO padFaceSyncDataDTO);

}
